home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / etc / hotplug / pnp.rc < prev    next >
Text File  |  2006-05-01  |  3KB  |  120 lines

  1. #!/bin/sh
  2. # vim: syntax=sh
  3. #
  4. #
  5. #  This program is free software; you can redistribute it and/or modify
  6. #  it under the terms of the GNU General Public License as published by
  7. #  the Free Software Foundation; either version 2 of the License, or
  8. #  (at your option) any later version.
  9. #
  10. # Copyright (C) 2004 Alexander E. Patrakov (patrakov@ums.usu.ru)
  11. # Copyright (C) 2004 Simone Gotti (simone.gotti@email.it)
  12. # All Rights Reserved.
  13. #
  14. # Based on scripts by Simone Gotti, from:
  15. # http://members.xoom.virgilio.it/motaboy/hotplug-isapnp-0.2.1.tar.bz2
  16. #
  17.  
  18.  
  19. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  20.  
  21. if [ "$(echo /sys/bus/pnp/devices/*)" = "/sys/bus/pnp/devices/*" ]
  22. then
  23.     exit 0
  24. fi
  25.  
  26. cd /etc/hotplug
  27. . ./hotplug.functions
  28.  
  29. MAP_CURRENT=$MODULE_DIR/modules.isapnpmap
  30. DRIVERS=
  31.  
  32. # WARNING: od and printf are in /usr/bin
  33. decode_isapnp_vendor() {
  34.     echo -n $1 | od -A n -t d1 | ( read A B C
  35.     printf '%x\n' $((     ( ( $A & 0x3f ) << 2) | \
  36.                     ( ( $B & 0x18 ) >> 3) | \
  37.             ( ( $B & 0x07 ) <<13) | \
  38.             ( ( $C & 0x1f ) << 8) )) )
  39. }
  40.  
  41. hex_swab() {
  42.     echo `echo $1 | cut -b3-4``echo $1 | cut -b1-2`
  43. }
  44.  
  45. #
  46. # stdin is "modules.isapnpmap" syntax
  47. # on return, ONE matching module was added to $DRIVERS
  48. #
  49. isapnp_map_modules ()
  50. {
  51.     local module ignored
  52.  
  53.     CHECKED_ID="0x`echo $ISAPNP_ID | cut -b1-4`0x`echo $ISAPNP_ID | cut -b5-8`"
  54.     # comment line lists (current) isapnp_device_id field names
  55.     read ignored
  56.  
  57.     while read module cardvendor carddevice driver_data therest
  58.     do
  59.     # comments are lines that start with "#" ...
  60.     # be careful, they still get parsed by bash!
  61.         case "$module" in
  62.     \#*) continue ;;
  63.     esac
  64.     : checkmatch $module
  65.     set $therest
  66.     while [ $# -gt 0 ] 
  67.     do
  68.         id_temp=$2$1
  69.         if [ "$id_temp" = "$CHECKED_ID" ] ; then
  70.                 DRIVERS="$module $DRIVERS"
  71.                 : drivers $DRIVERS
  72.                 break
  73.         fi
  74.             shift
  75.             shift
  76.     done
  77.     done
  78. }
  79.  
  80.  
  81. isapnp_boot_events ()
  82. {
  83.     cd /sys/bus/pnp/devices/
  84.     for ISAPNP_DEVICE in * ; do
  85.     ISAPNP_STRINGS=`cat $ISAPNP_DEVICE/id`
  86.     for ISAPNP_STRING in $ISAPNP_STRINGS ; do
  87.         rawcardvendor=`echo $ISAPNP_STRING | cut -b1-3`
  88.         rawcarddevice=`echo $ISAPNP_STRING | cut -b4-7`
  89.         cardvendor=`decode_isapnp_vendor $rawcardvendor`
  90.         carddevice=`hex_swab $rawcarddevice`
  91.             ISAPNP_ID=$carddevice$cardvendor
  92.         LABEL="ISAPNP id $ISAPNP_ID"
  93.         load_drivers isapnp $MAP_CURRENT "$LABEL"
  94.         load_drivers isapnp /etc/hotplug/pnp.distmap "$LABEL"
  95.     done
  96.     done
  97.     return 0
  98. }
  99.  
  100.  
  101. # See how we were called.
  102. case "$1" in
  103.     start)
  104.         isapnp_boot_events
  105.     ;;
  106.     stop)
  107.     # echo $"isapnp stop -- ignored"
  108.     ;;
  109.     status)
  110.     # echo $"isapnp status -- ignored"
  111.     ;;
  112.     restart)
  113.     # always invoke by absolute path, else PATH=$PATH:
  114.     $0 stop && $0 start
  115.     ;;
  116.     *)
  117.     echo $"Usage: $0 {start|stop|status|restart}"
  118.     exit 1
  119. esac
  120.